using System; 
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;

namespace XFGameFramework.MissionSystem
{
    /// <summary>
    /// 图标数据
    /// </summary>
    [Serializable]
    public class IconInfo 
    {
        /// <summary>
        /// 资源模块名称
        /// </summary>
        [Tooltip("资源模块名称")]
        public string projectName;
        /// <summary>
        /// 图标名称
        /// </summary>
        [Tooltip("图标名称")]
        public string iconName;
    }

    /// <summary>
    /// 奖品数据
    /// </summary>
    [Serializable]
    public class RewardInfo
    {
        /// <summary>
        /// 奖励物品ID
        /// </summary>
        [Tooltip("奖励物品ID")]
        public int id;

        /// <summary>
        /// 奖励物品数量
        /// </summary>
        [Tooltip("奖励物品数量")]
        public int count;
    }

    /// <summary>
    /// 默认任务配置数据
    /// </summary> 
    [Serializable]
    public class MissionConfigData  : ScriptableObject
    {


        /// <summary>
        /// 当前数据所在的配表
        /// </summary>
        [Tooltip("当前数据所在的配表")]
        [Header("当前数据所在的配表")]
        [ExcelSystem.ExcelIgnore]
#if UNITY_EDITOR
        [CustomMissionConfigDataParentGUI]
#endif 
        public MissionsConfig parent;

        /// <summary>
        /// 任务ID(唯一标识,不可重复)
        /// </summary>
        [Tooltip("任务ID(唯一标识,不可重复)")]
#if UNITY_EDITOR
        [CustomMissionConfigDataIDGUI]
#endif
        public int id;

        /// <summary>
        /// 任务名称
        /// </summary>
        [Tooltip("任务名称")]
        [Header("任务名称")]
        public string mission_name;

        /// <summary>
        /// 任务图标
        /// </summary>
        [Tooltip("任务图标")]
#if UNITY_EDITOR
        [CustomMissionConfigDataIconGUI]
#endif
        public IconInfo icon;

        /// <summary>
        /// 任务描述
        /// </summary>
        [Tooltip("任务描述")]
        [Header("任务描述")] 
        [TextArea(3,8)]
        public string description;


        /// <summary>
        /// 完成任务的条件
        /// </summary>
        [Tooltip("完成任务的条件")]
#if UNITY_EDITOR
        [CustomMissionConfigDataCompleteConditionGUI]
#endif
        public List<MissionCondition> conditions = new List<MissionCondition>();

        /// <summary>
        /// 任务完成的奖励
        /// </summary>
        [Tooltip("任务完成的奖励")]
        [Header("任务完成的奖励")]
        public List<RewardInfo> rewards = new List<RewardInfo>();


        /// <summary>
        /// 任务类型文件对应的guid
        /// </summary>
        [Tooltip("任务类型文件对应的guid")]
        [HideInInspector]
        public string mission_type_guid;

        /// <summary>
        /// 任务类全名称
        /// </summary>
        [Tooltip("任务类全名称")]
#if UNITY_EDITOR
        [CustomMissionConfigDataClassGUI]
#endif
        public string mission_type_class_fullname;

        /// <summary>
        /// 任务完成后是否重置参数(该参数在没有其他正在执行中的任务引用的情况下,默认:true)
        /// </summary>
        [Tooltip("任务完成后是否重置参数(该参数在没有其他正在执行中的任务引用的情况下,默认:true)")]
        [Header("任务完成后是否重置参数(该参数在没有其他正在执行中的任务引用的情况下,默认:true)")]
        public bool reset_param_on_completed = true;

#if UNITY_EDITOR

        public void Rename()
        {
            string asset_path = AssetDatabase.GetAssetPath(this);

            string current_name = AssetNameTools.GetName(id.ToString(), System.IO.Path.GetDirectoryName(asset_path));

            AssetDatabase.RenameAsset(asset_path, current_name);

            AssetDatabase.Refresh();
        }

#endif

    }
}
